import pandas as pd
import numpy as np
from pathlib import Path
import os

def analyze_assets():
    """分析资产关系数据，计算资产类型总额并合并数据"""
    try:
        # 配置数据文件路径
        data_dir = Path('data')
        source_dir = data_dir / 'source'
        output_dir = data_dir / 'alldata'
        
        # 确保输出目录存在
        output_dir.mkdir(parents=True, exist_ok=True)
        
        all_data = []
        
        # 遍历source目录下的所有子文件夹
        if source_dir.exists() and source_dir.is_dir():
            for folder in source_dir.iterdir():
                if folder.is_dir():
                    file_path = folder / '资产关系.xlsx'
                    print(f"正在处理文件: {file_path}")
                    
                    if file_path.exists():
                        try:
                            # 读取Excel文件，跳过第一行，使用第二行作为列名
                            df = pd.read_excel(file_path, header=1)
                        
                            # 添加来源文件夹信息
                            df['来源文件夹'] = folder.name
                          
                            # 处理所有数值列，保留两位小数
                            numeric_columns = df.select_dtypes(include=[np.number]).columns
                            for col in numeric_columns:
                                df[col] = df[col].round(2)
                            
                            all_data.append(df)
                            print(f"成功处理文件: {file_path}")
                            
                        except Exception as e:
                            print(f"处理文件 {file_path} 时出错: {str(e)}")
                            continue

        if not all_data:
            print("未找到任何资产关系数据文件")
            return False

        # 合并所有数据
        combined_df = pd.concat(all_data, ignore_index=True)
        
        # 保存合并后的数据
        output_file = output_dir / "资产关系全量结果.xlsx"
        combined_df.to_excel(output_file, index=False)
        print(f"已保存合并分析结果到: {output_file}")
        
        return True

    except Exception as e:
        print(f"分析过程中出错: {str(e)}")
        import traceback
        traceback.print_exc()
        return False

if __name__ == "__main__":
    print("开始分析资产关系数据...")
    success = analyze_assets()
    if success:
        print("分析完成！")
    else:
        print("分析失败！") 